import { getToken, setToken, listToTree } from "@/utils/common";
import { getPersonAPI, getPermmenuAPI } from "@/api/user";

export default {
  namespaced: true,

  state: () => ({
    token: getToken(), // 用户 token

    person: null, // 用户信息

    menus: [], // 用户菜单权限数据，包含菜单、路由、按钮
    perms: [], // 用户按钮权限数据
  }),

  getters: {
    menuTree(state) {
      // 过滤出需要显示的且 type 不为 2
      const list = state.menus.filter((item) => item.type !== 2 && item.isShow);

      return listToTree(list);
    },
  },

  mutations: {
    setToken(state, payload) {
      state.token = payload;
      // 写入本地存储
      setToken(payload);
    },

    setPerson(state, payload) {
      state.person = payload;
    },

    setPermmenu(state, payload) {
      state.menus = payload.menus;
      state.perms = payload.perms;
    },
  },

  actions: {
    /**
     * 退出登录
     */
    logout({ commit }) {
      commit("setToken", "");
    },

    async get({ dispatch, commit, state }) {
      const [person, permmenu] = await Promise.all([
        getPersonAPI(),
        getPermmenuAPI(),
      ]);
      commit("setPerson", person);
      commit("setPermmenu", permmenu);
      return permmenu.menus.filter((item) => item.type === 1);
    },

    /**
     * 获取个人信息
     */
    getPerson({ commit }) {
      // 调用接口
      getPersonAPI().then((result) => {
        commit("setPerson", result);
      });
    },

    /**
     * 获取个人权限
     */
    getPermmenu({ commit }) {
      // 调用接口
      getPermmenuAPI().then((result) => {
        commit("setPermmenu", result);
      });
    },
  },
};
